<?php
namespace Common\Model;
use Think\Model;

class CategoryModel extends Model{
    //实例化表明
    protected $tableName='blog_Category';
    protected $_validate=[
        ['cname','required','分类名称不能为空！']
    ];

    //按照等级显示信息
    public function gettrue(){
        $data=$this->order('sort asc')->select();
        return $this->resort($data) ;
    }

    /**
     * @param $data 所有的数据
     * @param $prentid 分类父级id
     * @param $level 分类等级
     */
    public function resort($data,$prentid=0,$level=0){
        static $result=[];
         foreach ($data as $k=>$v){
             if($v['pid']==$prentid){
                 $v['level']=$level;
                 $result[]=$v;
                 $this->resort($data,$v['cid'],$level+1);
             }
         }
         return $result;

    }


    //除了自己和自己的子集
    /**
     * @return string
     */
    public function getNoMy($cid)
    {
        $cids=$this->getSon($this->select(),$cid);
        $cids[]=$cid;
        //获取除了自己和子级之外所有的数据
        $data=$this->where("cid NOT IN(".implode(',',$cids).")")->select();
        return $this->resort($data);

    }

    /**获取当前分类的子级
     * @return string
     */
    public function getSon($data,$cid)
    {
         $temp=[];
        foreach ($data as $k=>$v){
            //如果当前循环$v里面的pid等于当前传入进来的cid的话
            if($v['pid']==$cid){
                //给临时数组压入到当前的cid
                $temp[]=$v['cid'];
                //递归执行，并合并到$temp数组中
                $temp=array_merge($temp,$this->getSon($data,$v['cid']));
            }
        }
        return $temp;

    }
}